/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.common.datareport.service;

import com.icinfo.cloud.provider.punish.common.datareport.dto.CaseDataReportRecordQueryDto;
import com.icinfo.cloud.provider.punish.common.datareport.dto.CaseDataReportRequestCommonDto;
import com.icinfo.cloud.provider.punish.common.datareport.dto.DataReportSpecialStageSpecialCaseDto;
import com.icinfo.cloud.provider.punish.common.datareport.model.CaseDataReportRecord;
import com.icinfo.cloud.provider.punish.common.datareport.model.CaseDataReportStageInfo;
import com.icinfo.cloud.provider.punish.common.datareport.vo.CaseDataReportRecordVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseMainInfoVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CasePartiesInfoVo;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * 描述: 案件数据上报记录表 case_data_report_record 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年03月30日
 */
public interface ICaseDataReportRecordService extends BaseService {
    /**
     * 描述：获取案件上报记录
     *
     * @param queryDto {@link CaseDataReportRecordQueryDto}
     * @return {@link List<CaseDataReportRecordVo>} 案件上报记录
     * @author xiangyuyu
     * @date 2022-03-30 20:29
     */
    List<CaseDataReportRecordVo> getCaseDataReportRecord(CaseDataReportRecordQueryDto queryDto);

    /**
     * 描述：是否上报案件基础信息
     *
     * @param caseId 案件id
     * @return 是否上报（true-是/false-否）
     * @author xiangyuyu
     * @date 2022-04-14 14:50
     */
    boolean isReportCaseBaseInfo(String caseId);

    /**
     * 描述：案件是否上报
     * @param  caseId 案件id
     * @return 是否上报（true-是/false-否）
     * @author lilihao
     * @date 2023/2/6 20:19
     */
    boolean isReportCase(String caseId);


    /**
     * 描述：分析上报结果判断是否上报成功
     *
     * @param result {@link Result <String>}
     * @return boolean 是否上报成功(true-是/false-否)
     * @author xiangyuyu
     * @date 2022-04-20 10:51
     */
    boolean analyseResultToJudgeIsReportSuccess(Result<String> result);

    /**
     * 描述：获取是否允许数据上报
     *
     * @param caseId 案件id
     * @return boolean true-是/false-否
     * @author xiangyuyu
     * @date 2022-04-02 17:09
     */
    boolean getIsAllowDataReport(String caseId);


    /**
     * 描述：数据上报
     *
     * @param uri            接口uri
     * @param reportDataType 上报数据类型
     * @param params         上报数据
     * @param caseMainInfo   案件信息
     * @return String 上报结果错误信息（空代表上报成功）
     * @author xiangyuyu
     * @date 2022-03-30 21:23
     */
    String dataReport(String uri, String reportDataType, Map<String, String> params, CaseMainInfoVo caseMainInfo);





    /**
     * 描述： 根据案件id和上报类型获取最新的上报成功记录
     *
     * @author: zhengqiang
     * @date: 2022/7/20
     * @param: caseId
     * @param: reportDataType
     * @return {@link CaseDataReportRecord}
     **/
    CaseDataReportRecord getLatestReportRecord(String caseId, String reportDataType);

    /**
     * 描述： 更新历史行政处罚决定上报成功记录的公示时间及地址
     *
     * @author: zhengqiang
     * @date: 2022/7/26
     * @param: record
     * @return {@link int}
     **/
    int updateHistoryDecisionReport(CaseDataReportRecord record);

    /**
     * 描述：个性化校验案件是否允许数据上报（优先取caseMainInfo的内容）
     *
     * @param caseId       案件id
     * @param caseMainInfo {@link CaseMainInfoVo}
     * @return 是否允许数据上报（true-是/false-否）
     * @author xiangyuyu
     * @date 2022/9/16
     * @since 1.4.1
     */
    boolean personalCheckIsAllowDataReport(String caseId, CaseMainInfoVo caseMainInfo);


    /**
     * 描述：【V1.4.2】描述：指定阶段指定案件重新数据上报
     *
     * @param dto {@link DataReportSpecialStageSpecialCaseDto}
     * @return Result<String> 上报结果信息
     * @author xiangyuyu
     * @date 2022/9/23
     * @since 1.4.2
     */
    Result<String> dataReportSpecialStageSpecialCase(DataReportSpecialStageSpecialCaseDto dto);

    /**
     * 案件更新，重新上报数据
     * @param stageIds
     * @param caseId
     * @param optType
     * @return
     */
    boolean dataReportSpecialStage(String stageIds, String caseId, String optType);

    /**
     * 描述：失败重试上报
     *
     * @param dto            {@link CaseDataReportRequestCommonDto}
     * @param partyInfo      {@link CasePartiesInfoVo} 当事人信息
     * @param caseMainInfo   {@link CaseMainInfoVo} 案件主体信息
     * @param service        {@link ICaseDataReportService}
     * @param reportDataType 数据上报阶段类型
     * @return {@link Result <String>} 上报结果
     * @author xiangyuyu
     * @date 2022/11/29
     * @since
     */
    Result<String> reportAgain(CaseDataReportRequestCommonDto dto, CasePartiesInfoVo partyInfo, CaseMainInfoVo caseMainInfo, ICaseDataReportService service,String reportDataType);


    /**
     * 描述：根据历史上报记录参数重新上报
     *
     * @param dto {@link DataReportSpecialStageSpecialCaseDto}
     * @return Result<String> 上报结果信息
     * @author xiangyuyu
     * @date 2023/3/27
     */
    Result<String> dataReportByHistoryReportParam(DataReportSpecialStageSpecialCaseDto dto);


    /**
     * 描述：根据案件id+阶段编号[支持集合]查询案件阶段对应最新一条上报记录相关信息
     *
     * @param caseIdList     案件id列表
     * @param reportDataType 数据上报阶段类型
     * @return List<CaseDataReportRecord> 上报记录相关信息列表
     * @author xiangyuyu
     * @date 2023/3/27
     */
    List<CaseDataReportRecord> getReportRecordByCaseStageInfo(List<String> caseIdList, String reportDataType);
}